package 笔试;

public class SingletonDemo {
    //1、饿汉式—静态常量方式（线程安全）
//    private static SingletonDemo instance = new SingletonDemo();
//
//    private SingletonDemo(){
//
//    }
//    public static SingletonDemo getInstance(){
//        return instance;
//    }

    //2、饿汉式—静态代码块方式（线程安全）
//    private static SingletonDemo instance;
//    static {
//        instance = new SingletonDemo();
//    }
//    private SingletonDemo(){}
//    public static SingletonDemo getInstance(){
//        return instance;
//    }
    //3、懒汉式（线程不安全）
//    private static SingletonDemo singleton;
//    private SingletonDemo(){}
//    public static SingletonDemo getInstance(){
//        if(singleton == null){
//            singleton = new SingletonDemo();
//        }
//        return singleton;
//    }
    //4、懒汉式（线程安全，方法上加同步锁）
//    private static SingletonDemo singleton;
//    private SingletonDemo(){}
//    public static synchronized SingletonDemo getInstance(){
//        if (singleton == null){
//            singleton = new SingletonDemo();
//        }
//        return singleton;
//    }
    //5、双重校验锁（线程安全，效率高）
//    private volatile static SingletonDemo singleton;
//
//    private SingletonDemo() {
//    }
//
//    public static SingletonDemo getSingleton() {
//        if (singleton == null) {
//            synchronized (SingletonDemo.class) {
//                if (singleton == null) {
//                    singleton = new SingletonDemo();
//                }
//            }
//        }
//        return singleton;
//    }
//    6、静态内部类实现单例（线程安全、效率高）
//    private static class SingletonHolder {
//        private static final SingletonDemo INSTANCE = new SingletonDemo();
//    }
//
//    private SingletonDemo() {
//    }
//
//    public static final SingletonDemo getInstance() {
//        return SingletonHolder.INSTANCE;
//    }
}
